class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
        // dp[i] 表示：以 i 位置的元素为结尾所有的子序列中，最长的等差子序列的长度。
        int n = arr.size(), ret = 1;
        unordered_map<int, int> dpHash(n);
        dpHash[arr[0]] = 1;
        for(int i = 1; i < n; ++i)
        {
            // if(dpHash[arr[i] - difference]) // b存在
            //     dpHash[arr[i]] = dpHash[arr[i] - difference] + 1;
            // else
            //     dpHash[arr[i]] = 1;
            dpHash[arr[i]] = dpHash[arr[i] - difference] + 1; // 不存在就是0，直接加
            ret = max(ret, dpHash[arr[i]]);
        }
        return ret;
    }
};